package marina;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class J21HelloJDBC {
	public static void main(String[] args) {
		String DRV = "oracle.jdbc.driver.OracleDriver"; // 오라클 DB에 접속하려면 반드시 이
														// 코드가 있어야함.
		String URL = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
		String USR = "scott";
		String PWD = "TIGER";

		// 일반적으로 제공하는 JDBC인터페이스
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		String sql = "select * from emp";

		try {
			// 1.JDBC 드라이버 로드
			Class.forName(DRV); // => forName메서드로 동적으로 객체 생성
			// 2.데이터베이스 연결
			conn = DriverManager.getConnection(URL, USR, PWD);
			// => DriverManager.getConnection : static으로 선언이 된 놈이기 때문에 바로 불러쓸 수
			// 있음.
			// => getConnection메서드에 접속 정보가 있는 URL과 계정 정보 및 암호인 USR,PWD를 매개 변수로
			// 넘김.
			System.out.println("오라클 서버 접속 성공");
			// 3.실행할 SQL 질의문 생성
			// SQL질의문은 String 변수에 작성한 후,
			// <1> prepareStatement메서드를 통해
			// <2> prepareStatement 객체로 생성
			pstmt = conn.prepareStatement(sql);
			// 4.SQL질의문 실행
			rs = pstmt.executeQuery(); // => executeQuery메서드로 SQL질의문을 실행할 수 있음.
			// 5.실행 결과 집합 받기
			// => SQL질의문이 select라면 실행 후 결과 집합이 발생됨. (이것을 받으려면 ResultSet 객체를 이용)
			StringBuilder sb = new StringBuilder();
			// 6.결과 집합 처리
			// => next메서드로 결과행 존재 여부를 확인하고 getString메서드로 해당 필드값을 출력
			while (rs.next()) {
				sb.append(rs.getString(1)).append("/")
						.append(rs.getString("ename")).append("/")
						.append(rs.getString("job")).append("/")
						.append(rs.getString(5)).append("/")
						.append(rs.getString("sal")).append("/").append("\n");
			}
			System.out.println(sb);
		} catch (ClassNotFoundException cnfe) {
			System.out.println("JDBC드라이버를 확인하세요.");
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			// 7.연결 해제
			// => JDBC 프로그래밍에 사용된 모든 객체들은 메모리에서 해제시킴(역순으로 해야함) 
			if (rs != null) {
				try {
					conn.close();
				} catch (Exception e) {
					
				}
			}
			if (pstmt != null) {
				try {
					conn.close();
				} catch (Exception e) {
					
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (Exception e) {

				}
			}
		}
	}// main
}// class
